Skip to content

Module Architecture

flowchart TD
    SUBSMOD["sadeem_subscription\nSubscription Base"]

    PKG["sadeem.subscription.trial.package\npackage config · duration\nresource limits · trial type"]
    LIM["sadeem.subscription.trial.model.limit\nper-model record limits\nfor trial package"]
    REQ["sadeem.subscription.trial.requests\ntrial request from customer\ncompany · email · mobile"]
    SUB["sadeem.subscription\ncreated from approved request"]
    WEB[/public trial form\n/saas/trial or /saas/trial/url/]

    SUBSMOD --> SUB

    PKG --> LIM
    WEB --> REQ
    REQ --> PKG

    PKG --> A1([define_auto_run\nauto-create + confirm subscription])
    PKG --> A2([success_message\ncustomizable per-package message])

    REQ --> A3([action_create_subscription\ncreate sadeem.subscription from request])
    REQ --> A4([action_create_partner\ncreate res.partner from request data])
    REQ --> A5([action_confirm\napprove request → trigger auto-run])
    REQ --> A6([action_reject\nreject trial request])

    A3 --> SUB
    A4 --> REQ

    CTRL[/website controller\n/saas/trial route/]
    WEB --> CTRL
    CTRL --> REQ

Module Description

SAAS Subscription Trial - Allows potential customers to request trial subscriptions through a public website form. Supports customizable trial packages with configurable duration, resource limits, and automatic subscription creation.

Dependencies

  • base, web, mail, website
  • sadeem_subscription

Menus

Website
└─ Trial Subscriptions
    ├─ Trial Packages
    └─ Trial Requests

Trial Flow

Customer fills form → Trial Request created → Partner created → Subscription created → Build & Run
  1. Customer visits /saas/trial or /saas/trial/<package-url>
  2. Fills out the trial form (name, company, email, mobile, company size)
  3. System creates a trial request record and a partner record
  4. If Auto Run Subscription is enabled on the package, the subscription is automatically created, confirmed, and queued for deployment
  5. Customer sees a success message (customizable per package)

Key Fields

Trial Package (sadeem.subscription.trial.package)

Field Type Description
url_string Char URL slug for the trial form (e.g., my-package) (required)
package_url Char Full computed URL to the public trial form
publish Boolean Whether this package is publicly visible
auto_run_subscription Boolean Auto-create and confirm subscription on request
trial_duration Integer Trial length in days (required; default: 14)
grace_period Integer Extra days after trial end before stopping (default: 3)
user_limit Integer Maximum users allowed during trial (required)
storage_limit Integer Storage quota in MB (required)
stage_count Integer Number of extra stages allowed (default: 0)
backup_enabled Boolean Whether backups are enabled for trial instances
subscription_package_ids Many2many Odoo module packages installed on trial instances
subscription_type Selection Deployment type (docker or dbfilter)
model_limit_ids One2many Per-model record limits for the trial
success_message Html Message shown to customer after submitting request
database_template Many2one Database template to restore on trial instance creation

Trial Model Limit (sadeem.subscription.trial.model.limit)

Field Type Description
trial_package_id Many2one Parent trial package
model_name Char Technical Odoo model name to limit (required)
record_limit Integer Maximum number of records (required; default: 100)

Trial Request (sadeem.subscription.trial.requests)

Field Type Description
name Char Contact name (required)
company_name Char Customer company name (required)
email Char Contact email (required)
mobile Char Contact mobile number (required)
company_size Selection 1_10, 11_50, 51_200, 201_500, 500_plus
trial_package_id Many2one The trial package requested
related_partner_id Many2one Created res.partner linked to this request
subscription_id Many2one Created sadeem.subscription linked to this request
state Selection Request lifecycle: new, processing, done, cancelled
notes Text Internal notes
database_template Many2one Database template override for this specific request

Subscription — Trial additions (sadeem.subscription inherit)

Field Type Description
is_trial Boolean Whether this subscription was created from a trial request

Lifecycle & States

Trial Request States

State Meaning
new Request received, not yet processed
processing Subscription creation in progress
done Subscription successfully created
cancelled Request was rejected or manually cancelled

Transitions: - newprocessingdone: action_create_subscription creates the subscription; if auto_run_subscription is True, also confirms and queues deployment - newcancelled: action_cancel - cancellednew: action_reset_to_new

Key Actions

Action Model Description
action_create_subscription sadeem.subscription.trial.requests Creates a sadeem.subscription from the request; optionally auto-confirms and runs if auto_run_subscription is set
action_cancel sadeem.subscription.trial.requests Cancels the trial request
action_reset_to_new sadeem.subscription.trial.requests Resets a cancelled request back to new
action_view_subscription sadeem.subscription.trial.requests Opens the linked subscription record
action_view_partner sadeem.subscription.trial.requests Opens the linked partner record
define_auto_run sadeem.subscription.trial.package Called when auto_run_subscription is True; triggers subscription confirm and provisioning
success_message sadeem.subscription.trial.package Returns the HTML success message shown to the customer

Warnings & Important Notes

  • Subscription creation blocked: action_create_subscription raises ValidationError if state is not new or processing, or if a subscription already exists for the request.
  • Cannot cancel completed requests: action_cancel raises ValidationError if state is done.
  • Can only reset cancelled requests: action_reset_to_new raises ValidationError if state is not cancelled.
  • SQL constraint on email: _sql_constraints enforces unique email per trial request (prevents duplicate submissions).
  • Trial duration required: trial_duration is required=True on the trial package.
  • User and storage limits required: Both user_limit and storage_limit are required=True on the trial package.